﻿

//using System;
//using System.Text;

//namespace TestReferenceEquality
//{

//    class BaseClass
//    {
//        public virtual void Method1()
//        {
//            Console.WriteLine("Base - Method1");
//        }
//        public  void Method2()
//        {
//            Console.WriteLine("Base - Method2");
//        }
//    }



//    class Program05
//    {
//        static void Main()
//        {
            
//            BaseClass bc = new BaseClass();
//            bc.Method1();
//            bc.Method2();
//            // Output:  
//            // Base - Method1  
//            // Base - Method2  

//            DerivedClass dc = new DerivedClass();
//            dc.Method1();
//            dc.Method2();
//            // Output:  
//            // Derived - Method1  
//            // Derived - Method2  

//            // The following two calls produce different results, depending
//            // on whether override (Method1) or new (Method2) is used.  
//            BaseClass dc2 = new DerivedClass();
//            dc2.Method1();
//            dc2.Method2(); // 这里执行的是父类中的方法，父类 A = new 子类()  并且是new关键字修饰子类中的方法 
//            Console.ReadKey();
//            // Output:  
//            // Derived - Method1  
//            // Base - Method2  

//        }
//    }
//    class DerivedClass : BaseClass
//    {
//        public override void Method1()
//        {
//            Console.WriteLine("Derived - Method1");
//        }

//        public new void Method2()
//        {
//            Console.WriteLine("Derived - Method2");
//        }
//    }


//    //// Define the base class, Car. The class defines two methods,  
//    //// DescribeCar and ShowDetails. DescribeCar calls ShowDetails, and each derived  
//    //// class also defines a ShowDetails method. The example tests which version of  
//    //// ShowDetails is selected, the base class method or the derived class method.  
//    //class Car
//    //{
//    //    public void DescribeCar()
//    //    {
//    //        System.Console.WriteLine("Four wheels and an engine.");
//    //        ShowDetails();
//    //    }

//    //    public virtual void ShowDetails()
//    //    {
//    //        System.Console.WriteLine("Standard transportation.");
//    //    }
//    //}

//    //// Define the derived classes.  

//    //// Class ConvertibleCar uses the new modifier to acknowledge that ShowDetails  
//    //// hides the base class method.  
//    //class ConvertibleCar : Car
//    //{
//    //    public new void ShowDetails()
//    //    {
//    //        System.Console.WriteLine("A roof that opens up.");
//    //    }
//    //}

//    //// Class Minivan uses the override modifier to specify that ShowDetails  
//    //// extends the base class method.  
//    //class Minivan : Car
//    //{
//    //    public override void ShowDetails()
//    //    {
//    //        System.Console.WriteLine("Carries seven people.");
//    //    }

//    //}
//    //class Program
//    //{
//    //    static void Main()
//    //    {

//    //            System.Console.WriteLine("\nTestCars1");
//    //            System.Console.WriteLine("----------");

//    //            Car car1 = new Car();
//    //            car1.DescribeCar();
//    //            System.Console.WriteLine("----------");

//    //            // Notice the output from this test case. The new modifier is  
//    //            // used in the definition of ShowDetails in the ConvertibleCar  
//    //            // class.

//    //            ConvertibleCar car2 = new ConvertibleCar();
//    //            car2.DescribeCar();
//    //            System.Console.WriteLine("----------");

//    //            Minivan car3 = new Minivan();
//    //            car3.DescribeCar();
//    //            System.Console.WriteLine("----------");
//    //    }
//    //}



//}
